package com.syl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;

/**
 * --- 就那样---
 *
 * @author SYL
 * @date 2025/8/1
 * @desc
 */
@WebServlet("/demo")
public class Demo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        /**
         * HttpServletRequest 常用方法
         * 获取请求参数：
         * getParameter(String name) - 获取单个参数值
         * getParameterValues(String name) - 获取参数数组（如多选框）
         * getParameterMap() - 获取所有参数的Map
         * 获取请求信息：
         * getMethod() - 获取请求方法（GET/POST等）
         * getRequestURI() - 获取请求URI
         * getQueryString() - 获取查询字符串
         * getRemoteAddr() - 获取客户端IP
         * 操作请求头：
         * getHeader(String name) - 获取指定请求头
         * getHeaders(String name) - 获取请求头枚举
         * getHeaderNames() - 获取所有请求头名称
         * 请求范围数据传递：
         * setAttribute(String name, Object o) - 设置属性
         * getAttribute(String name) - 获取属性
         * removeAttribute(String name) - 移除属性
         * 会话管理：
         * getSession() - 获取会话对象
         * getSession(boolean create) - 获取会话，可指定是否创建

         *
         *
         */

        //获取请求参数
        String username = req.getParameter("username"); //单个参数值：
        System.out.println("username = " + username);
        //多个同名参数值（例如复选框）：
        String[] sexs = req.getParameterValues("sex");
        System.out.println("sexs = " + Arrays.toString(sexs));

        //所有参数名：
        // Enumeration<String> paramNames = req.getParameterNames();
        // while (paramNames.hasMoreElements()) {
        //     String name = paramNames.nextElement();
        //     String value = req.getParameter(name);
        //     System.out.println("value = " + value);
        //     // 处理参数
        // }

        String username1 = req.getParameter("username");
        System.out.println("username1 = " + username1);
        String password = req.getParameter("password");
        System.out.println("password = " + password);

        String sex = req.getParameter("sex");
        System.out.println("sex = " + sex);

        String[] skills = req.getParameterValues("skill");
        System.out.println("skills = " + Arrays.toString(skills));


        String email = req.getParameter("email");
        System.out.println("email = " + email);
        String date = req.getParameter("birthday");
        System.out.println("date = " + date);
        String[] edu = req.getParameterValues("edu");
        System.out.println("edu = " + Arrays.toString(edu));
        String beizhu = req.getParameter("beizhu");
        System.out.println("beizhu = " + beizhu);

        //相应 HttpServletResponse (resp)
        /**
         * * HttpServletResponse 常用方法：
         *          * 设置响应状态：
         *          * setStatus(int sc) - 设置状态码
         *          * 常用状态码常量：SC_OK, SC_NOT_FOUND, SC_INTERNAL_SERVER_ERROR等
         *          * 设置响应内容：
         *          * setContentType(String type) - 设置内容类型和编码
         *          * setCharacterEncoding(String charset) - 设置字符编码
         *          * 设置响应头：
         *          * setHeader(String name, String value) - 设置响应头
         *          * addHeader(String name, String value) - 添加响应头
         *          * 输出响应内容：
         *          * getWriter() - 获取字符输出流
         *          * getOutputStream() - 获取字节输出流
         *          * 重定向：
         *          * sendRedirect(String location) - 重定向到指定位置
         */

        //设置响应内容类型
        resp.setContentType("text/html;charset=UTF-8");//设置内容类型和字符编码：

        // 获取输出流
        PrintWriter out = resp.getWriter();
        out.println("<h1>嗨嗨 成功了老铁!</h1>");//输出字符串后自动添加换行符 支持所有基本类型、对象（自动转换） 适合输出独立行内容
        out.write("<h1>行啊</h1>");//仅输出字符串本身，不会添加换行符  主要支持字符、字符数组、字符串 适合连续输出文本（无需自动换行）

        //GIT 测试
    }
}
